package com.kaifamiao.wendao.tags;

import javax.servlet.jsp.PageContext;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.logging.Logger;

public class Functions {

    private static Logger logger = Logger.getLogger( Functions.class.getName() );

    // 指定 日期模式
    private static String pattern = "yyyy-MM-dd HH:mm:ss" ;
    // 根据 日期模式 和 Locale 获得 DateTimeFormatter 实例
    private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern( pattern , Locale.getDefault() );

    public static String format( LocalDateTime datetime ){
        if( datetime == null ) {
            return "" ;
        }
        logger.info( "日期时间格式化" );
        // 对 LocalDateTime 实例进行格式化 (此时是不包含时区信息的)
        String str = formatter.format( datetime );
        // 返回格式化后的字符串
        return str ;
    }

    /**
     * 从指定的作用域中获取指定名称的属性值，并将该属性从该作用域中删除
     * @param attributeName 属性名
     * @param scopeName 作用域名称(取值是 page 、request 、session 、application 之一 )
     * @param pageContext JSP上下文对象
     * @return 返回指定作用域中指定属性的值
     */
    public static Object flash(String attributeName , String scopeName  , PageContext pageContext ){

        int scope = PageContext.PAGE_SCOPE ;

        // 根据 scopeName 确定 作用域( scope)
        switch ( scopeName.toLowerCase() ) {
            case "page" :
                scope = PageContext.PAGE_SCOPE ;
                break ;
            case "request" :
                scope = PageContext.REQUEST_SCOPE ;
                break ;
            case "session" :
                scope = PageContext.SESSION_SCOPE ;
                break ;
            case "application" :
                scope = PageContext.APPLICATION_SCOPE ;
                break ;
        }

        // 从指定的作用域中获取指定属性名对应的值
        Object value = pageContext.getAttribute( attributeName , scope );

        // 从指定作用域中删除指定名称的属性
        pageContext.removeAttribute( attributeName , scope );

        // 返回指定作用域中指定属性的值
        return value ;
    }

}
